package com.example.apartment.controller;

import com.example.apartment.common.ApiRestResponse;
import com.example.apartment.common.RespExceptionEnum;
import com.example.apartment.domain.Admin;
import com.example.apartment.domain.Bed;
import com.example.apartment.service.BedService;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.util.List;

/**
 * 宿舍床位控制器
 *
 * @author wuzexin
 * @date 2021/11/3 13:48
 */
@RestController
@RequestMapping("/admin/bed")
public class BedController {

    @Resource
    private BedService bedService;

    /*
        新增床位
     */
    @PostMapping("/create")
    public ApiRestResponse create(Integer bedNum, Integer roomNum, String buildingName, HttpSession session) {

        // 从session获取到管理员用户信息
        Admin admin = (Admin) session.getAttribute("admin");
        if (admin == null) {
            // 如果admin为空，则抛出未登录异常
            return ApiRestResponse.error(RespExceptionEnum.NEED_LOGIN);
        }

        // 新增床位
        Bed bed = bedService.create(admin, bedNum, roomNum, buildingName);

        return ApiRestResponse.success(bed);
    }

    /*
        修改床位信息
     */
    @PostMapping("/update")
    public ApiRestResponse update(Integer id, Integer bedNum, HttpSession session) {

        // 从session获取到管理员用户信息
        Admin admin = (Admin) session.getAttribute("admin");
        if (admin == null) {
            // 如果admin为空，则抛出未登录异常
            return ApiRestResponse.error(RespExceptionEnum.NEED_LOGIN);
        }

        // 修改床位信息
        Bed bed = bedService.update(admin, id, bedNum);

        return ApiRestResponse.success(bed);
    }

    /*
        删除床位信息
     */
    @PostMapping("/delete")
    public ApiRestResponse delete(Integer id, HttpSession session) {

        // 从session获取到管理员用户信息
        Admin admin = (Admin) session.getAttribute("admin");
        if (admin == null) {
            // 如果admin为空，则抛出未登录异常
            return ApiRestResponse.error(RespExceptionEnum.NEED_LOGIN);
        }

        // 删除床位信息
        bedService.delete(admin, id);

        return ApiRestResponse.success();
    }

    /*
        查询床位信息
     */
    @PostMapping("/select")
    public ApiRestResponse select(HttpSession session) {

        // 从session获取到管理员用户信息
        Admin admin = (Admin) session.getAttribute("admin");
        if (admin == null) {
            // 如果admin为空，则抛出未登录异常
            return ApiRestResponse.error(RespExceptionEnum.NEED_LOGIN);
        }

        // 查询床位信息
        List<Bed> list = bedService.select(admin);

        return ApiRestResponse.success(list);
    }

    /*
        根据buildingName查询床位列表
     */
    @PostMapping("/selectByBuildingName")
    public ApiRestResponse selectByBuildingName(String buildingName, HttpSession session) {

        // 从session获取到管理员用户信息
        Admin admin = (Admin) session.getAttribute("admin");
        if (admin == null) {
            // 如果admin为空，则抛出未登录异常
            return ApiRestResponse.error(RespExceptionEnum.NEED_LOGIN);
        }

        // 查询床位列表
        List<Bed> list = bedService.selectByBuildingName(admin, buildingName);

        return ApiRestResponse.success(list);
    }
}
